查看原文
其他

.NET Core AA.FrameWork应用框架介绍

DotNet 2021-09-23

(给DotNet加星标,提升.Net技能

转自:成天
cnblogs.com/chengtian/p/11684860.html

 AA.FrameWork 是基于.NET core流行的开源类库创建的基础应用框架。



 框架代码图如:




源代码github地址:https://github.com/ChengLab/AAFrameWork


nuget管理中,搜索前缀名称 AA 即可如图



Nuget Packages




public class UserInfoMap : DommelEntityMap<UserInfo>
{
public UserInfoMap()
{
ToTable("Sys_UserInfo");//映射具体的表名
Map(p => p.SysNo).IsKey();//指定主键 ,IsIdentity是否自增
Map(p=>p.GmtCreate).ToColumn("GmtCreateDate"); //属性名和数据库列名 可以不同
Map(p=>p.LastLoginDate).Ignore();//一些计算属性,可以忽略不需要跟数据库列进行映射
}
}


使用MapConfiguration.Init方法,把映射类初始化,后续就可以使用了


public static void InitMapCfgs()
{
var fluentMapconfig = new List<Action<FluentMapConfiguration>>();
fluentMapconfig.Add(cfg =>
{
cfg.AddMap(new UserInfoMap());
});
MapConfiguration.Init(fluentMapconfig);
}


开始使用AA.Dapper


使用DapperContext设置数据库连接和数据库类型是sqlserver还是mysql


public class AADapperContext : DapperContext
{
public AADapperContext() : base(new NameValueCollection()
{
["aa.dataSource.AaCenter.connectionString"] = "Data Source =.; Initial Catalog = AaCenter;User ID = sa; Password = 123;",
["aa.dataSource.AaCenter.provider"] = "SqlServer"
})
{ }
}


仓储包含了大部分的操作,同时支持Async操作


IDapperRepository<UserInfo> userInfoRepository = new DapperRepository<UserInfo>();



var user = userInfoRepository.Get(1);
user.GmtModified = DateTime.Now;
var result = userInfoRepository.Update(user);



支持Dapper原生操作



public class UserInfoRepository : DapperRepository<UserInfo>, IUserInfoRepository
{
private readonly IDapperContext _dapperContext;
public UserInfoRepository(IDapperContext context)
{
_dapperContext = context;
}
public IEnumerable<UserInfo> QueryAll()
{
var result = _dapperContext.DataBase.Query<UserInfo>("SELECT * from [Sys_UserInfo]");//实例
return result;
}
}



AA.ServiceBus 用法


生产者(事件和命令两种类型)


实例化bus

//事件
IBusControl busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)
.BuildEventProducer();

//命令
ISendEndpoint busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)
.BuildCommandProducer(queueName);



[Fact]
public void TestConsumer()
{
Log4NetLogger.Use("Log4Net/log4net.config");
string rabbitMqUri = "rabbitmq://localhost:5672";
string rabbitMqUserName = "";
string rabbitMqPassword = "";
string queueName = "order.queue";
var busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)
.RegisterConsumer<SubmitOrderCommandConsumer>(queueName)//注册命令消费者
.RegisterConsumer<OrderSubmittedEventConsumer>(null)//注册事件消费者
.Build();
busControl.Start();
}


定义消费者需要实现接口IConsumer


public class OrderSubmittedEventConsumer : IConsumer<OrderSubmitted>
{
public async Task Consume(ConsumeContext<OrderSubmitted> context)
{
var @event = context.Message;
var result = $"OrderSubmittedEvent {@event.Id.ToString()}";
ILog log = Logger.Get(typeof(OrderSubmittedEventConsumer));
log.Debug(result);
//do somethings...
}
}

public class SubmitOrderCommandConsumer : IConsumer<SubmitOrder>
{
public async Task Consume(ConsumeContext<SubmitOrder> context)
{
var command = context.Message;
var result = $"CreateFooCommand {command.Id.ToString()}";
ILog log = Logger.Get(typeof(SubmitOrderCommandConsumer));
log.Debug(result);
//do somethings...
}
}



在程序startup调用配置


var mapperConfig = new WebMapperConfigurations();
AutoMapperConfiguration.Init(new List<Action<IMapperConfigurationExpression>> { mapperConfig.GetConfiguration() });
ObjectMapping.ObjectMapManager.ObjectMapper = new AutoMapperObjectMapper();


利用扩展方法MapTo执行映射


[Fact]
public void TestMap()
{
//init
Init();
UserVm userVm = new UserVm { Id = 1, Name = "成天" ,Remark="微信公众号:dotNet知音"};
var userDto = userVm.MapTo<UserInput>();
//var userDto2 = userVm.MapTo<UserVm,UserInput>();
}


后面也会提供基于AA框架的应用实例,有问题可以联系我,一起交流和成长


推荐阅读

(点击标题可跳转阅读)

ASP.NET Core 3.0 jwt的轻量角色/用户、单个API控制的授权认证库

基于SignalR的服务端和客户端通讯处理

树莓派搭建个人服务器


看完本文有收获?请转发分享给更多人

关注「DotNet」加星标,提升.Net技能 

好文章,我在看❤️

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存